package com.seeyon.apps.kkSample.manager.impl;

import com.seeyon.apps.kkSample.config.KKESignConfig;
import com.seeyon.apps.kkSample.manager.KKEsignTemplateFileManager;
import com.seeyon.apps.kkSample.po.SHKKResult;
import com.seeyon.apps.kkSample.utils.file.FileMD5Util;
import com.seeyon.apps.kkSample.utils.http.HttpUtil;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.filemanager.manager.AttachmentManager;
import com.seeyon.ctp.common.filemanager.manager.FileManager;
import com.seeyon.ctp.common.log.CtpLogFactory;
import com.seeyon.ctp.util.json.JSONUtil;
import org.apache.commons.logging.Log;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * 文件和模板服务API - V3
 */
public class KKEsignFileTemplateManagerImpl implements KKEsignTemplateFileManager {

    private static final Log LOG = CtpLogFactory.getLog(KKEsignFileTemplateManagerImpl.class);
    private static FileManager fileManager = (FileManager) AppContext.getBean("fileManager");
    private static AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager");

    /**
     * 获取文件上传地址 - V3
     *
     * @param appUrl       e签宝集成地址
     * @param headerParams 请求头参数
     * @param file         文件
     * @param fileName     文件名称
     * @param fileSize     文件大小
     * @return
     */
    @Override
    public SHKKResult getFileUpLoadUrl(String appUrl, Map<String, Object> headerParams, File file, String fileName, Long fileSize) {
        //1、请求体参数
        String contentMD5 = FileMD5Util.getStringContentMD5(file);//获取文件的MD5格式
        HashMap<String, Object> params = new HashMap<>();
        params.put("contentMd5", contentMD5);
        params.put("contentType", "application/pdf");
        params.put("fileName", fileName);
        params.put("fileSize", fileSize);
        String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);// 后缀名
        if (!"pdf".equalsIgnoreCase(prefix)) {
            params.put("convertToPDF", true);
        }
        //2、请求地址
        String url = appUrl + KKESignConfig.UP_LOAD;
        //3、发送请求
        return JSONUtil.parseJSONString(HttpUtil.doPost(url, headerParams, params), SHKKResult.class);
    }

    /**
     * 上传文件流
     *
     * @param file 文件
     * @param url  文件上传地址
     * @return
     */
    @Override
    public String upLoad(File file, String url) {
        //1、请求头参数
        String contentMD5 = FileMD5Util.getStringContentMD5(file);//获取文件的MD5格式
        //2、发送请求
        String result = HttpUtil.putFile(url, contentMD5, file);
        //3、获取请求结果
        Map<String, Object> resultMap = JSONUtil.parseJSONString(result, Map.class);
        return resultMap.get("errCode").toString();
    }

    /**
     * 查询文件上传状态
     *
     * @param appUrl
     * @param headerParams
     * @param fileId
     * @return
     */
    @Override
    public SHKKResult getFileType(String appUrl, Map<String, Object> headerParams, String fileId) {
        //1、请求体参数
        HashMap<String, Object> params = new HashMap<>();
        //2、请求地址
        String url = appUrl + "/v3/files/" + fileId;
        //3、发送请求
        return JSONUtil.parseJSONString(HttpUtil.doGet(url, headerParams, params), SHKKResult.class);
    }

}
